// ts基础类型
var mes: string | number | boolean | null | undefined = 'HelloWorld'; //联合类型（变量可以是其中的任何一种类型）
console.log(mes);
mes = 111;
console.log(mes);
var message: string = 'hello world';
var num: number = 12345;
var bool: boolean = true;
var a: any = '123';
var b: undefined = undefined;

// 数组类型的两种写法
var arr: number[] = [1, 2];
var arr2: Array<number> = [1, 2, 3, 4, 5, 6];
console.log(arr2);

// 用接口表示数组
interface NumberArray {
    [index: number]: number
}
var arr3: NumberArray = [1, 2, 3, 4, 5]

// 类数组类型 IArguments,NodeList,HTMLCollection
interface IArguments {
    [index: number]: any;
    length: number;
    callee: Function;
}

// ***函数的类型***
// 1.函数声明
function sayHello(params: string): void {
    console.log(params);
    return;
}
sayHello('hello luosir');
// 2.函数表达式
let sayNo: (params: string) => string = function (params: string): string {
    console.log(params);
    return params;
}
sayNo('NO');

// 枚举
enum color {
    red = '红色',
    yellow = '黄色',
    blue = '蓝色'
}
let c: color = color.red;

// 类型断言
// 1. < 类型 > 值
// 2. 值 as 类型 在react的tsx语法中必须使用这种
c = <any>num;
c = true as any;

console.log(message, num, bool, b, color, c);

// ***接口interface***
interface Person {
    readonly id: number; // 只读属性
    name: string; // 确定属性
    age: number;
    gender?: string; // 可选属性
    [propName: string]: string | number; // 任意属性，确定属性和可选属性的类型必须是任意属性类型的子集
}
let luo: Person = {
    id: 1,
    name: 'luo',
    age: 18,
    gender: 'male',
    hobby: 'coding'
}

// **泛型**




